# 两种情况：
# 1.impossible的情况：如果有一个字符出现的次数是奇数次数，而且n是偶数，那么不可能构成回文。
# 如果n是奇数，但是已经有一个字符出现的次数是奇数次数了，那么如果又有一个字符是奇数次数，就不可能构成回文。
# 2.如果n是奇数，计算中间那个字符交换的次数的时候，不需要模拟把这个数移动到中间去，因为移动到中间的话假设有一对数都在左边或者都在右边。那么交换成回文的时候就要经过中间，就会每次把cnt多加了1，而这个1是没有必要的，因为可以所有的回文移动完了之后再把这个独立的奇数移动过去，才能保证交换次数最少
# 样例输入
# 5
# mamad
# 样例输出
# 3

def is_pal(n, s):
    temp = set()
    if n % 2 == 0:  # n 是偶数
        for i in range(26):
            if s.count(chr(ord('a') + i)) % 2 != 0:
                print('Impossible')  # 如果字符串字符为偶数,但是存在不成对字符
                return False
        else:
            return True
    else:  # n 是奇数
        for i in range(26):
            if s.count(chr(ord('a') + i)) % 2 != 0:
                temp.add(chr(ord('a') + i))
            if len(temp) > 1:
                print('Impossible')  # 如果字符串字符为奇数,但是存在不成对字符超过一个
                return False
        else:
            return True


def count_step(n, s, s1):
    ans = 0
    for i in range(n // 2):
        if s[i:].count(s[i]) != 1:
            temp = s1[:n - i].index(s[i])
            s1.pop(temp)
            ans += temp
            s = s1[::-1]
        else:
            ans += n // 2 - i
            s[i] = None  # 将此奇数移动到中间后清除
            s1 = s[::-1]
    return ans


if __name__ == '__main__':
    n = int(input())  # 字符串的长度
    s = list(input())  # 输入字符串
    s1 = s[::-1]  # 逆序

    if is_pal(n, s):  # 如果是回文数 计算挪动的步数
        print(count_step(n, s, s1))
